/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.softnight.dao;

import br.com.softnight.db.ConnectionFactory;
import br.com.softnight.entidades.ItemVenda;
import br.com.softnight.entidades.Produto;
import br.com.softnight.entidades.Venda;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;

/**
 *
 * @author Franklin
 */
public class ItemVendaDAO {

    //método para incluir um aluno na base de dados
    public void insere(ItemVenda itemVenda) throws SQLException {
    
        String insereSql = "INSERT INTO ItemVenda ("
                + " id,"
                + " vendaId,"
                + " produtoId,"
                + " quantidade,"
                + " valorUnitario,"
                + " valorTotal"
                + " ) VALUES (?, ?, ?, ?, ?, ?)";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(insereSql);
        pstmt.setLong(1, itemVenda.getId());
        pstmt.setLong(2, itemVenda.getVenda().getId());
        pstmt.setLong(3, itemVenda.getProduto().getId());
        pstmt.setInt(4, itemVenda.getQuantidade());
        pstmt.setDouble(5, itemVenda.getValorUnitario());
        pstmt.setDouble(6, itemVenda.getValorTotal());
        pstmt.executeUpdate();
    }

    //método para consultar um aluno de determinada matricula fornecida no parametro matrAluno
    public ItemVenda consultaPorId(Long id) throws SQLException {
        ItemVenda itemVenda = null;
            
        String consultaSql = "SELECT"
                + " id,"
                + " vendaId,"
                + " produtoId,"
                + " quantidade,"
                + " valorUnitario,"
                + " valorTotal"
                + " FROM ItemVenda WHERE id = ?";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement pstmt = con.prepareStatement(consultaSql);
        pstmt.setLong(1, id);
        ResultSet resultado = pstmt.executeQuery();
        if (resultado.next()) {
            Long vendaId = resultado.getLong("vendaId");
            Long produtoId = resultado.getLong("produtoId");
            Integer quantidade = resultado.getInt("quantidade");
            Double valorUnitario = resultado.getDouble("valorUnitario");
            Double valorTotal = resultado.getDouble("valorTotal");

            VendaDAO vendaDAO = new VendaDAO();
            Venda venda = vendaDAO.consultaPorId(vendaId);
            
            ProdutoDAO produtoDAO = new ProdutoDAO();
            Produto produto = produtoDAO.consultaPorId(produtoId);
                    
            itemVenda = new ItemVenda();
            itemVenda.setId(id);
            itemVenda.setVenda(venda);
            itemVenda.setProduto(produto);
            itemVenda.setQuantidade(quantidade);
            itemVenda.setValorUnitario(valorUnitario);
            itemVenda.setValorTotal(valorTotal);
        }

        return itemVenda;
    }

    public ArrayList<ItemVenda> consultaPorVendaId(Long vendaId) throws SQLException {
        ArrayList<ItemVenda> itensVenda = new ArrayList<ItemVenda>();
            
        String consultaSql = "SELECT"
                + " id,"
                + " vendaId,"
                + " produtoId,"
                + " quantidade,"
                + " valorUnitario,"
                + " valorTotal"
                + " FROM ItemVenda WHERE vendaId = ?";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement pstmt = con.prepareStatement(consultaSql);
        pstmt.setLong(1, vendaId);
        ResultSet resultado = pstmt.executeQuery();
        while (resultado.next()) {
            Long id = resultado.getLong("id");
            Long produtoId = resultado.getLong("produtoId");
            Integer quantidade = resultado.getInt("quantidade");
            Double valorUnitario = resultado.getDouble("valorUnitario");
            Double valorTotal = resultado.getDouble("valorTotal");

            VendaDAO vendaDAO = new VendaDAO();
            Venda venda = vendaDAO.consultaPorId(vendaId);
            
            ProdutoDAO produtoDAO = new ProdutoDAO();
            Produto produto = produtoDAO.consultaPorId(produtoId);
                    
            ItemVenda itemVenda = new ItemVenda();
            itemVenda.setId(id);
            itemVenda.setVenda(venda);
            itemVenda.setProduto(produto);
            itemVenda.setQuantidade(quantidade);
            itemVenda.setValorUnitario(valorUnitario);
            itemVenda.setValorTotal(valorTotal);
            
            itensVenda.add(itemVenda);
        }

        return itensVenda;
    }

    public ArrayList<ItemVenda> consultaTodos() throws SQLException {
        ArrayList<ItemVenda> itensVenda = new ArrayList<ItemVenda>();
            
        String consultaSql = "SELECT"
                + " id,"
                + " vendaId,"
                + " produtoId,"
                + " quantidade,"
                + " valorUnitario,"
                + " valorTotal"
                + " FROM Venda ";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement pstmt = con.prepareStatement(consultaSql);
        ResultSet resultado = pstmt.executeQuery();
        while (resultado.next()) {
            Long id = resultado.getLong("id");
            Long vendaId = resultado.getLong("vendaId");
            Long produtoId = resultado.getLong("produtoId");
            Integer quantidade = resultado.getInt("quantidade");
            Double valorUnitario = resultado.getDouble("valorUnitario");
            Double valorTotal = resultado.getDouble("valorTotal");

            VendaDAO vendaDAO = new VendaDAO();
            Venda venda = vendaDAO.consultaPorId(vendaId);
            
            ProdutoDAO produtoDAO = new ProdutoDAO();
            Produto produto = produtoDAO.consultaPorId(produtoId);
                    
            ItemVenda itemVenda = new ItemVenda();
            itemVenda.setId(id);
            itemVenda.setVenda(venda);
            itemVenda.setProduto(produto);
            itemVenda.setQuantidade(quantidade);
            itemVenda.setValorUnitario(valorUnitario);
            itemVenda.setValorTotal(valorTotal);
            
            itensVenda.add(itemVenda);
        }

        return itensVenda;
    }

    public void atualiza(ItemVenda itemVenda) throws SQLException {
        String atualizaSql = "UPDATE Cliente SET"
                + " vendaId = ?,"
                + " produtoId = ?,"
                + " quantidade = ?,"
                + " valorUnitario = ?,"
                + " valorTotal = ?"
                + " WHERE id = ?";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(atualizaSql);
        pstmt.setLong(1, itemVenda.getVenda().getId());
        pstmt.setLong(2, itemVenda.getProduto().getId());
        pstmt.setInt(3, itemVenda.getQuantidade());
        pstmt.setDouble(4, itemVenda.getValorUnitario());
        pstmt.setDouble(5, itemVenda.getValorTotal());
        pstmt.setLong(6, itemVenda.getId());

        pstmt.executeUpdate();
    }

    public void exclui(Long id) throws SQLException {
        String deleteSql = "DELETE FROM ItemVenda WHERE id = ?";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(deleteSql);
        pstmt.setLong(1, id);
        pstmt.execute();
    }
}
